/*
 * MatAlgebra.h
 *
 *  Created on: May 27, 2011
 *      Author: nzhao
 */

#ifndef MATALGEBRA_H_
#define MATALGEBRA_H_

#include "share/Usrdef.h"
#include "share/gsl_app.h"
//#include <gsl/gsl_math.h>
//#include <gsl/gsl_eigen.h>
//#include <gsl/gsl_blas.h>
//#include <gsl/gsl_complex.h>
//#include <gsl/gsl_complex_math.h>

#define MKL_Complex16 std::complex<double>
#include "mkl.h"
#include "mkl_lapack.h"
#include "mkl_trans.h"

void realsym_mat_diag(int dim, double * mat, gsl_vector * eval, gsl_matrix * evec);
void hermite_mat_diag(int dim, double * mat, gsl_vector * eval, gsl_matrix_complex * evec);
void MKL_mat_mult(int dim, char * transa, char * transb, CLD alpha, CLD * mat1, CLD * mat2, CLD beta, CLD * mat_res);
void MKL_real_mat_mult(int dim, char * transa, char * transb, double alpha, double * mat1, double * mat2, double beta, double * mat_res);
void MKL_mat_vec_mult(int dim, char * trans,CLD alpha, CLD * mat, CLD * vect, CLD beta, CLD * vect_res);
void MKL_matrix_copy(char trans, int dim, CLD alpha, CLD * src, CLD * dst);
void MKL_hermite_mat_diag(int blk_dim, CLD * matList, double * eval, CLD * evec);
void MKL_matrix_complex_row_transform(int dim, CLD * exp_vals, CLD * right_mat);
void MKL_i_t_Hermite_Matrix_Exp(int dim, double * eigvals, CLD * eigvec, double t, CLD * res_mat);

#endif /* MATALGEBRA_H_ */
